import request from '@/config/axios'
import { OaFileClassType } from '@/utils/constants'

// 文件预签名地址 Response VO
export interface FilePresignedUrlRespVO {
  // 文件配置编号
  configId: number
  // 文件上传 URL
  uploadUrl: string
  // 文件 URL
  url: string
  // 文件路径
  path: string
  id: number
  parentId: number
  fileClass: number
  isShare: number
  isFolder: number
  isUsed: number
  title: string
}

// 查询文件列表
export const getFilePage = (params: PageParam) => {
  return request.get({ url: '/infra/file/page', params })
}

export const getFileListByIds = (ids: string[]) => {
  let result
  if (Array.isArray(ids)) {
    result = ids.join(',')
  } else {
    result = ids || ''
  }
  return request.get({ url: '/infra/file/getByIds?ids=' + result })
}


// 删除文件
export const deleteFile = (id: number) => {
  return request.delete({ url: '/infra/file/delete?id=' + id })
}

// 获取文件预签名地址
export const getFilePresignedUrl = (name: string, directory?: string) => {
  return request.get<FilePresignedUrlRespVO>({
    url: '/infra/file/presigned-url',
    params: { name, directory }
  })
}

// 创建文件
export const createFile = (data: any) => {
  return request.post({ url: '/infra/file/create', data })
}



// 上传文件
export const updateFile = (data: any) => {
  return request.upload({ url: '/infra/file/upload', data })
}

// 更新文件详情
export const updateDetail = (data: any) => {
  return request.post({ url: '/infra/file/update', data })
}

// 更新文件详情
export const getDetail = (id: number) => {
  return request.get({ url: '/infra/file/get?id=' + id })
}

// 获取所有树形节点
export const getAllTree = () => {
  return request.get({ url: '/infra/file/getTree' })
}

// 判断文件是否存在
export const fileExist = (fileIds: string) => {
  return request.get({ url: '/oa/file-relevance/fileExist?fileIds=' + fileIds })
}

export const getFilesByBiz = async (bizType: string, bizId: number) => {
  return await request.get({ url: '/infra/file/list-by-biz?bizType=' + bizType + '&bizId=' + bizId });
};


const officeView = ref({
  url: '',
  dialog: false,
  type: '',
  title: '',
  xlsOptions: {
    xls: false,       //预览xlsx文件设为false；预览xls文件设为true
    minColLength: 0,  // excel最少渲染多少列，如果想实现xlsx文件内容有几列，就渲染几列，可以将此值设置为0.
    minRowLength: 0,  // excel最少渲染多少行，如果想实现根据xlsx实际函数渲染，可以将此值设置为0.
    widthOffset: 10,  //如果渲染出来的结果感觉单元格宽度不够，可以在默认渲染的列表宽度上再加 Npx宽
    heightOffset: 10, //在默认渲染的列表高度上再加 Npx高
    beforeTransformData: (workbookData) => { return workbookData }, //底层通过exceljs获取excel文件内容，通过该钩子函数，可以对获取的excel文件内容进行修改，比如某个单元格的数据显示不正确，可以在此自行修改每个单元格的value值。
    transformData: (workbookData) => { return workbookData }, //将获取到的excel数据进行处理之后且渲染到页面之前，可通过transformData对即将渲染的数据及样式进行修改，此时每个单元格的text值就是即将渲染到页面上的内容
  }
})

// 查看文件
const openViewForm = (item: FilePresignedUrlRespVO) => {
  console.log(item)
  //查看图片
  if (item.fileClass == OaFileClassType.IMAGE) {
    createImageViewer({ urlList: [item.url] })
  } else if (item.fileClass == OaFileClassType.VIDEO) {
    //查看视频
    createVideoViewer({ url: item.url, poster: item.url })
  } else if (item.fileClass == OaFileClassType.OFFICE) {
    //https://501351981.github.io/vue-office/examples/docs/guide/
    //word
    if (item.path.indexOf('.doc') > -1) {
      officeView.value.url = item.url
      officeView.value.dialog = true
      officeView.value.type = 'doc'
    }
    else if (item.path.indexOf('.xlsx') > -1) {
      //WARNING 目前只支持xlsx文件预览，不支持xls文件。
      officeView.value.url = item.url
      officeView.value.dialog = true
      officeView.value.type = 'xlsx'
    }
    else if (item.path.indexOf('.pdf') > -1) {
      officeView.value.url = item.url
      officeView.value.dialog = true
      officeView.value.type = 'pdf'
    }
    else {
      message.error('暂不支持该文件类型预览,请下载后查看')
    }
  } else if (item.fileClass == OaFileClassType.ON_LINE) {
    //todo 在线文档
    formUpdateRef.value.open(item.id, 'online', true)
  } else if (item.fileClass == OaFileClassType.AUDIO) {
    officeView.value.title = item.name || '音频预览'
    officeView.value.url = item.url
    officeView.value.dialog = true
    officeView.value.type = 'audio'

    //todo 音频文件,可参照AI模块. /ai/music/index
  } else {
    message.error('暂不支持该文件类型预览,请下载后查看')
  }

}